import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.read_csv('d:/dataset/广播电视情况.csv',header=0)
# 数据提取（从文档中提取2015-2019年数据）
years = ['2015', '2016', '2017', '2018', '2019']
domestic_box_office = [271.36, 287.47, 301.04, 378.97, 411.75]  # 国产电影票房收入（亿元）
import_box_office = [169.33, 205.36, 258.07, 230.79, 230.91]  # 进口电影票房收入（亿元）

# 全局配置项
plt.figure(figsize=(12, 8), dpi=300)  # 设置图表大小和分辨率
plt.title('2015-2019年我国国产与进口电影票房收入堆积柱形图',
          fontsize=16, fontweight='bold', pad=20)  # 主标题
plt.text(0.95, 0.95, '单位：亿元', transform=plt.gca().transAxes,
         ha='right', va='top', fontsize=12)  # 单位标注

# X轴和Y轴配置
plt.xlabel('年份', fontsize=12, fontweight='bold')
plt.ylabel('票房收入（亿元）', fontsize=12, fontweight='bold')
plt.xticks(years, fontsize=10, rotation=0)  # X轴刻度标签
plt.yticks(fontsize=10)
plt.grid(axis='y', linestyle='--', alpha=0.7)  # 网格线

# 系列配置项（堆积柱形图）
bar_width = 0.6  # 柱子宽度
x = np.arange(len(years))  # X轴位置

# 绘制国产电影票房（底部柱子）
bar_domestic = plt.bar(x, domestic_box_office, width=bar_width,
                       label='国产电影票房收入', color='#4472C4',  # 蓝色（RGB色值）
                       edgecolor='white', linewidth=1.2)  # 白色边框

# 绘制进口电影票房（顶部堆积柱子）
bar_import = plt.bar(x, import_box_office, width=bar_width,
                     label='进口电影票房收入', color='#5B9BD5',  # 绿色（RGB色值）
                     edgecolor='white', linewidth=1.2,
                     bottom=domestic_box_office)  # 堆积在国产票房上方

# 添加数据标签（总票房和分项票房）
for i in range(len(years)):
    # 总票房（堆积柱顶部）
    total = domestic_box_office[i] + import_box_office[i]
    plt.text(x[i], total, f'{total:.2f}',
             ha='center', va='bottom', fontsize=10)

    # 国产票房（柱子中部下方）
    plt.text(x[i], domestic_box_office[i] / 2, f'{domestic_box_office[i]:.2f}',
             ha='center', va='center', fontsize=10, color='white')

    # 进口票房（柱子中部上方）
    import_y = domestic_box_office[i] + import_box_office[i] / 2
    plt.text(x[i], import_y, f'{import_box_office[i]:.2f}',
             ha='center', va='center', fontsize=10, color='white')

# 图例配置
plt.legend(loc='upper right', fontsize=12, frameon=True,
           facecolor='white', edgecolor='gray')  # 图例位置和样式

# 图表整体样式优化
plt.tight_layout()  # 自动调整布局
plt.gca().spines['top'].set_visible(False)  # 隐藏顶部边框
plt.gca().spines['right'].set_visible(False)  # 隐藏右侧边框

# 显示图表
plt.show()